package org.zwy.gradetrack.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.zwy.gradetrack.entity.TeacherEvaluation;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 教师评价Service接口
 */
public interface TeacherEvaluationService extends IService<TeacherEvaluation> {
    
    /**
     * 分页查询教师评价
     *
     * @param current 当前页
     * @param size 每页大小
     * @param teacherId 教师ID
     * @param studentId 学生ID
     * @param indicatorId 指标点ID
     * @return 分页结果
     */
    Page<TeacherEvaluation> pageEvaluations(Integer current, Integer size, Long teacherId, Long studentId, Long indicatorId);
    
    /**
     * 创建教师评价
     *
     * @param evaluation 评价信息
     * @return 创建的评价
     */
    TeacherEvaluation createEvaluation(TeacherEvaluation evaluation);
    
    /**
     * 更新教师评价
     *
     * @param id 评价ID
     * @param evaluation 评价信息
     * @return 更新后的评价
     */
    TeacherEvaluation updateEvaluation(Long id, TeacherEvaluation evaluation);
    
    /**
     * 获取评价统计信息
     *
     * @param teacherId 教师ID
     * @param studentId 学生ID
     * @param indicatorId 指标点ID
     * @return 统计信息
     */
    Map<String, Object> getStatistics(Long teacherId, Long studentId, Long indicatorId);
    
    /**
     * 批量导入评价数据
     *
     * @param evaluations 评价数据列表
     */
    void batchImport(List<TeacherEvaluation> evaluations);
    
    /**
     * 检查评价是否存在
     *
     * @param teacherId 教师ID
     * @param studentId 学生ID
     * @param indicatorId 指标点ID
     * @return 是否存在
     */
    boolean existsEvaluation(Long teacherId, Long studentId, Long indicatorId);
    
    /**
     * 获取教师对学生的所有评价
     *
     * @param teacherId 教师ID
     * @param studentId 学生ID
     * @return 评价列表
     */
    List<TeacherEvaluation> getTeacherStudentEvaluations(Long teacherId, Long studentId);
    
    /**
     * 获取学生对指标点的所有评价
     *
     * @param studentId 学生ID
     * @param indicatorId 指标点ID
     * @return 评价列表
     */
    List<TeacherEvaluation> getStudentIndicatorEvaluations(Long studentId, Long indicatorId);

    /**
     * 获取指定指标点和评价年份的最新评价分数
     * @param indicatorId 指标点ID
     * @param evaluationYear 评价年份
     * @return 评价分数
     */
    BigDecimal getLatestEvaluationScore(Long indicatorId, Integer evaluationYear);
} 